package com.ruoyi.system.vo;

import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ruoyi.system.domain.DesignSchemeImage;
import com.ruoyi.system.domain.PmMaterialItem;
import com.ruoyi.system.domain.vo.BudgetGroupVo;
import com.ruoyi.system.dto.ContractDTO;
import com.ruoyi.system.domain.PmMaterialList;
import com.ruoyi.system.entity.ConstructionProjectDO;
import com.ruoyi.system.entity.ConstructionProjectItemDO;
import com.ruoyi.system.entity.ContractFile;
import com.ruoyi.system.entity.DemandChangeRequestDO;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * H5消息详情聚合视图对象
 * 用于H5端消息详情页面展示，根据消息类型动态填充对应的扩展字段
 * 包含基础消息信息、类型化业务数据、附件信息等
 * 
 * @author ruoyi
 * @since 2024-01-01
 */
@Data
public class H5MsgDetailVO {
    
    /**
     * 消息子项ID
     * 用于标识具体的消息实例
     */
    private Long itemId;

    /**
     * 是否需要签名 1需要 0不需要
     */
    private Integer needSignature;

    /**
     * 消息处理状态
     * 0-待推送, 1-已推送, 2-已过期, 3-取消, 4-失败
     */
    private Integer status;
    
    /**
     * 消息阅读状态
     * 0-未读, 1-已读
     */
    private Integer readStatus;
    
    /**
     * 消息标题
     * 基于模板渲染后的最终标题
     */
    private String title;
    
    /**
     * 消息内容
     * 基于模板渲染后的最终内容
     */
    private String contentRendered;
    
    /**
     * 内容变量
     * 原始JSON格式的变量数据
     */
    private String contentVars;
    
    /**
     * 消息类型
     * 1-设计资料, 2-主材清单, 3-合同签署, 4-验收信息, 5-财务支付, 6-其他
     */
    private Integer type;
    
    /**
     * 关联项目ID
     */
    private Long projectId;
    
    /**
     * 关联项目名称
     */
    private String projectName;

    /**
     * 验收事项信息
     */
    private ConstructionProjectDO constructionProjectDO;

    /**
     * 合同签署：合同详情信息
     * 当消息类型为合同签署(3)时填充
     */
    private ContractDTO contract;

    /**
     * 主材清单：清单详情列表
     * 当消息类型为主材清单(2)时填充
     */
    private Map<Integer, List<BudgetGroupVo>> materialItems;

    /**
     * 验收单：验收单实例信息
     * 当消息类型为验收单(6)时填充
     */
    private AcceptanceChecklistInstanceVO acceptanceChecklist;

    /**
     * 通用附件列表
     * 用于存储各种类型的附件信息（设计图片、合同附件、验收附件等）
     */
    private List<MsgAttachmentVO> attachments;

    private List<DesignSchemeImage> designSchemeImageList;

    /**
     * 关联业务编号
     */
    private String businessNo;

    /**
     * 关联业务名
     */
    private String businessName;

    /**
     * 过期时间
     */
    private LocalDateTime expireAt;

    private DemandChangeRequestDO demandChangeRequestDO;

}


